package day_2022_4_to_7.leetcode;

/**
 * @author haomin
 * @date 2022/05/24 15:16
 **/
public class Num7_reverseNum {
    public static void main(String[] args) {
       System.out.println(reverse(123));
    }
    public static int reverse(int x) {
        if(x > -10 && x < 10){
            return x;
        }
        boolean flag = false;
        if(x < 0){
            flag =true;
        }
        int num = Math.abs(x);

        String result = "";
        if(flag){
            result+="-";
        }
        while (num != 0){
            result+= num % 10;
            num /= 10;
        }

        try {
            num = Integer.valueOf(result);
        }catch (Exception e){
            return 0;
        }

        return num;
    }

    public static int reverse2(int x) {
        long n = 0;
        while (x != 0){
            n = n*10 + x%10;
            x /= 10;
        }
        return (int)n == n ? (int) n : 0;
    }
    public int reverse3(int x) {
        //溢出如何处理？
        //integer最大值为10位数的10进制
        //如果溢出x也必须是10位数，而且在反转最后一位数的时候溢出
        //int型最大值时21亿多，也就是说x的最后一位最大为2
        //因此只要res*10不溢出，res*10加x的最后一位一定不会溢出
        int res = 0;
        while(x != 0){

            if (res < Integer.MIN_VALUE / 10 || res > Integer.MAX_VALUE / 10) {
                return 0;
            }
            res = res * 10 + x % 10;
            x /= 10;
        }
        return res;
    }
}